package org.pupil.stack;

/**
 * @Description: 栈数组实现
 * 实际刷题时更常见的写法，常数时间好
 * 如果可以保证同时在栈里元素个数不会超过n，那么可以用
 * 也就是发生弹出操作之后，空间都可以复用
 * 一般笔试、面试都会有一个明确数据量，所以这是最常用的方式
 * @Author: pupil
 * @Date: 2024/08/04 下午 12:41
 */
public class Stack {
    private int[] stack;
    private int size;

    // 同时在栈里的元素个数不会超过n
    public Stack(int n) {
        stack = new int[n];
        size = 0;
    }

    // 判断栈是否为空
    public boolean isEmpty() {
        return size == 0;
    }

    // 入栈
    public void push(int num) {
        stack[size++] = num;
    }

    // 出栈
    public int pop() {
        return stack[--size];
    }

    // 查看栈顶元素
    public int peek() {
        return stack[size - 1];
    }

    public int size(){
        return size;
    }

    public static void main(String[] args) {
        Stack stack = new Stack(20);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        stack.push(7);

        int top = stack.peek();
        System.out.println("栈顶元素："+top);

        int size = stack.size;
        System.out.println("栈的长度："+size);

        System.out.println("栈遍历结果：");
        while (!stack.isEmpty()){
            int num = stack.pop();
            System.out.println(num);
        }
    }
}
